package main

import (
	"fmt"
	"github.com/xuri/excelize/v2"
	"strconv"
	"time"
)

// import (
//
//	"encoding/json"
//	"fmt"
//	"io/ioutil"
//	"time"
//
//	"github.com/xuri/excelize/v2"
//
// )
//
//	type Response struct {
//		Code int `json:"code"`
//		Data struct {
//			TotalSize   int `json:"total_size"`
//			VersionDiff []struct {
//				ShopName         string `json:"shop_name"`
//				ShopID           string `json:"shop_id"`
//				EnCenterVersion  string `json:"en_center_version_code"`
//				EnCenterStart    string `json:"en_center_start_time"`
//				EnCenterEnd      string `json:"en_center_end_time"`
//				PlatVersionCode  string `json:"plat_version_code"`
//				PlatVersionStart string `json:"plat_version_start_time"`
//				PlatVersionEnd   string `json:"plat_version_end_time"`
//			} `json:"version_diff"`
//		} `json:"data"`
//	}
//
// var cutoffDate = time.Date(2025, 5, 26, 0, 0, 0, 0, time.UTC)
//
//	func main() {
//		jsonData, err := ioutil.ReadFile("/Users/gyl/Documents/gostudy/json_to_excel/a.json")
//		if err != nil {
//			panic(err)
//		}
//
//		var resp Response
//		if err := json.Unmarshal(jsonData, &resp); err != nil {
//			panic(err)
//		}
//
//		f := excelize.NewFile()
//		defer f.Close()
//
//		// 设置表头
//		headers := []string{"店铺名称", "店铺ID", "企业平台版本", "企业平台开始时间",
//			"企业平台结束时间", "机器人平台版本", "机器人平台开始时间", "机器人平台结束时间"}
//		for i, h := range headers {
//			cell, _ := excelize.CoordinatesToCellName(i+1, 1)
//			f.SetCellValue("Sheet1", cell, h)
//		}
//
//		// 新增去重map
//		uniqueMap := make(map[string]struct{})
//		row := 2
//
//		for _, item := range resp.Data.VersionDiff {
//			// 时间过滤
//			end1 := parseTime(item.EnCenterEnd)
//			end2 := parseTime(item.PlatVersionEnd)
//			if (end1 != nil && end1.After(cutoffDate)) ||
//				(end2 != nil && end2.After(cutoffDate)) {
//
//				// 生成复合键
//				key := fmt.Sprintf("%s|%s|%s|%s|%s|%s|%s|%s",
//					item.ShopName,
//					item.ShopID,
//					item.EnCenterVersion,
//					item.EnCenterStart,
//					item.EnCenterEnd,
//					item.PlatVersionCode,
//					item.PlatVersionStart,
//					item.PlatVersionEnd,
//				)
//
//				// 去重校验
//				if _, exists := uniqueMap[key]; exists {
//					continue
//				}
//				uniqueMap[key] = struct{}{}
//
//				// 写入数据
//				data := []interface{}{
//					item.ShopName,
//					item.ShopID,
//					item.EnCenterVersion,
//					item.EnCenterStart,
//					item.EnCenterEnd,
//					item.PlatVersionCode,
//					item.PlatVersionStart,
//					item.PlatVersionEnd,
//				}
//
//				for i, v := range data {
//					cell, _ := excelize.CoordinatesToCellName(i+1, row)
//					f.SetCellValue("Sheet1", cell, v)
//				}
//				row++
//			}
//		}
//
//		if err := f.SaveAs("/Users/gyl/Documents/gostudy/json_to_excel/mini原始数据.xlsx"); err != nil {
//			panic(err)
//		}
//		fmt.Printf("处理完成，有效数据：%d 条", row-2)
//	}
//
//	func parseTime(timeStr string) *time.Time {
//		if timeStr == "" {
//			return nil
//		}
//		t, err := time.Parse("2006-01-02", timeStr)
//		if err != nil {
//			return nil
//		}
//		return &t
//	}
func main() {
	// 1. 打开源文件
	f, err := excelize.OpenFile("/Users/gyl/Documents/gostudy/txt_to_excel/腾讯云_副本.xlsx")
	if err != nil {
		fmt.Println("打开文件失败:", err)
		return
	}
	defer f.Close()

	// 2. 定义需要处理的工作表
	sheets := []string{"腾讯云", "mini"} // 根据实际情况修改

	for _, sheet := range sheets {
		// 3. 读取原始数据
		rows, err := f.GetRows(sheet)
		if err != nil {
			fmt.Printf("读取工作表[%s]失败: %v\n", sheet, err)
			continue
		}

		// 4. 初始化结果集
		var results [][]string
		results = append(results, rows[0]) // 保留标题行

		// 5. 列索引映射（根据你的截图列顺序）
		cols := map[string]int{
			"enterprise_end": 4, // E列（企业平台结束时间）
			"robot_end":      7, // H列（机器人平台结束时间）
		}

		// 6. 处理数据行
		for _, row := range rows[1:] { // 跳过标题行
			if len(row) < 8 { // 确保列数足够
				continue
			}

			// 解析时间
			enterpriseTime, e1 := parseExcelTime(row[cols["enterprise_end"]])
			robotTime, e2 := parseExcelTime(row[cols["robot_end"]])

			// 时间有效性检查
			if e1 != nil || e2 != nil {
				continue
			}

			// 核心判断逻辑
			if robotTime.Before(enterpriseTime) {
				results = append(results, row)
			}
		}

		// 7. 创建新工作表
		targetSheet := sheet + "修改"
		index, _ := f.NewSheet(targetSheet)

		// 8. 写入数据
		for rowIdx, row := range results {
			for colIdx, value := range row {
				cell, _ := excelize.CoordinatesToCellName(colIdx+1, rowIdx+1)
				f.SetCellValue(targetSheet, cell, value)
			}
		}

		// 设置当前工作表（可选）
		f.SetActiveSheet(index)
	}

	// 9. 保存修改
	if err := f.SaveAs("result.xlsx"); err != nil {
		fmt.Println("保存文件失败:", err)
	}
}

// 解析Excel时间（兼容数字和字符串格式）
func parseExcelTime(value string) (time.Time, error) {
	// 步骤1：尝试解析为Excel数值日期
	if numericValue, err := strconv.ParseFloat(value, 64); err == nil {
		if t, err := excelize.ExcelDateToTime(numericValue, false); err == nil {
			return t, nil
		}
	}

	// 步骤2：尝试解析为字符串格式日期
	formats := []string{"2006-01-02", "2006/01/02", "01-02-2006"}
	for _, layout := range formats {
		if t, err := time.Parse(layout, value); err == nil {
			return t, nil
		}
	}

	return time.Time{}, fmt.Errorf("无法解析的时间格式: %s", value)
}
